<?php
namespace frontend\controllers;

use Yii;
use yii\web\Controller;
use PDO;
class LoginController extends Controller
{
	public $enableCsrfValidation = false; // 关闭csrf验证

    /**
     * navicat登录页面
     */
    public function actionLogin(){
        return $this->renderPartial('login');
    }

    /**
     * 接收前端ajax传递过来的数据库信息
     * 1、判断非空
     * 连接成功的处理: 
     * 1.把数据库信息存入session
     * 2.链接名当做数组下标, 
     * 3.
     */
    public function actionDb_file(){
	 	$linkname = trim(Yii::$app->request->post('linkname')); //连接名
	 	$address = trim(Yii::$app->request->post('address')); //IP地址
	 	$port = trim(Yii::$app->request->post('port')); //端口号
	 	$mysql_uname = trim(Yii::$app->request->post('mysql_uname')); //mysql用户名
	 	$mysql_pwd = trim(Yii::$app->request->post('mysql_pwd')); //mysql密码
	 	//判断非空方法, 当有非空信息的时候才会有返回信息
    	$is_dbfile = $this->is_dbfile($linkname, $address, $port, $mysql_uname, $mysql_pwd);
        if($is_dbfile == '10'){
            //数据库信息正确的处理
            $success_dbinfos = $this->success_dbinfos($linkname, $address, $port, $mysql_uname, $mysql_pwd);
            if($success_dbinfos === '00'){
                return json_encode('00');
            }
            return json_encode('1');
        }
    }

    /**
     * 验证接收的数据库信息非空
     */
    public function is_dbfile($linkname, $address, $port, $mysql_uname, $mysql_pwd){
    	//连接名非空
    	if($linkname === ''){
    		return json_encode('0_linkname');
    	}
    	//IP地址
    	if($address === ''){
    		return json_encode('0_address');
    	}
    	//端口号
    	if($port === ''){
    		return json_encode('0_port');
    	}
    	//mysql用户名
        if($mysql_uname === ''){
            return json_encode('0_mysql_uname');
        }else{
            return '10';
        }
    }

    /**
     * 数据库信息正确的处理
     */
    public function success_dbinfos($linkname, $address, $port, $mysql_uname, $mysql_pwd){
        // 判断pdo连接时候可用
        try{
            $pdo = new PDO("mysql:host=$address;port=$port;", "$mysql_uname", "$mysql_pwd");
            $pdo->getAttribute(PDO::ATTR_SERVER_INFO);
        } catch (PDOException $e) {
            if(strpos($e->getMessage(), 'MySQL server has gone away')!==false){
                print_r('连接失败');die;
            }
        }
        //拼接的数据库信息数据
        $dbfile_one = $linkname.','.$address.','.$port.','.$mysql_uname.','.$mysql_pwd;
        //转换为数组形式
        $dbfile_arr = explode(',', $dbfile_one);
        //进行判断数据库信息的session是否已经存在
        if(!Yii::$app->session->has('dbinfos')){
            $arr = [];
            $arr[] = $dbfile_arr;
            $db_string = serialize($arr); //序列化
            Yii::$app->session->set('dbinfos', $db_string);
        }else{
            //如果session存在,先获取session原来的数据
            $dbinfos = Yii::$app->session->get('dbinfos'); 
            $dbinfos_arr = unserialize($dbinfos); //反序列化,现在又转换成原来的数组形式了
            //判断连接的唯一性,ip唯一
            foreach($dbinfos_arr as $key => $value){
                if($value['1'] === $address){
                    return '00';
                }
            }
            $dbinfos_arr[] = $dbfile_arr; //将新加入的数据库信息追加到session数组中
            $db_string = serialize($dbinfos_arr); //序列化
            Yii::$app->session->set('dbinfos', $db_string); //将新数组存入session
        }
    }
}